home *** CD-ROM | disk | FTP | other *** search
/ Clipper Collection / Clipper Collection.iso / clipper7 / nannws36.arc / EQUIP.C < prev    next >
Text File  |  1989-05-01  |  5KB  |  183 lines

  1. /* Program: EQUIP.C                                    */
  2. /* Authors: Gerry Braganza and Diane Lask              */
  3. /* Version: Clipper Summer '87                         */
  4. /* Note(s): Equipment attached to the computer as well */
  5. /*          as keyboard status and system ID.          */
  6. /*                                                     */
  7. /* Copyright (c) 1989 Nantucket Corp.                  */
  8.  
  9. #include "\fix\nandef.h"     /* As Nantucket defines it.   */
  10. #include "\fix\extend.h"     /* Nantucket's extend header. */ 
  11. #include "\include\stdio.h"
  12.  
  13.  
  14. #define EQLIST      0x410    /* BIOS int 17 equipment list.*/
  15. #define MEMSIZ      0x413    /* BIOS int 8 memory size.    */
  16. #define KEY_STAT    0x417    /* Current keybd status bits. */
  17.  
  18.  
  19. CLIPPER Eq()
  20.  
  21. {
  22.  
  23. /* Input and return parameters. */
  24.  
  25. int p_input;
  26. int p_return;
  27.  
  28. /* Mempeek holds an integer from anywhere in memory. */
  29. unsigned far *mempeek;         
  30.                    
  31.  
  32. /* Check for proper parameter from Clipper. */
  33. if (ISNUM(1))
  34.     {
  35.       p_input = _parni(1);
  36.     }
  37. else
  38.     {
  39.       /* Display error message. */
  40.       printf("Type Mismatch \n");
  41.       exit();
  42.     }
  43.  
  44. /* Look at BIOS equipment list. */
  45. mempeek =  (int *) EQLIST;     
  46.  
  47. /* Check parameter. */
  48. switch (p_input)
  49.    {
  50.    case 1:                                   
  51.  
  52.         {
  53.            /* DMA chip */                            
  54.            p_return = ((*(mempeek) & 1) ? 1:0); break;    
  55.         }                                    
  56.  
  57.    case 2:                                   
  58.  
  59.         {                                    
  60.           /* no. of printers */
  61.           p_return = *(mempeek) >> 14; break; 
  62.         }                                    
  63.  
  64.    case 3:
  65.  
  66.         {
  67.           /* no. of serial ports */
  68.             p_return =  (*mempeek >> 9) & 7; break;
  69.         }
  70.  
  71.    case 4:
  72.         {
  73.           /* number of diskette drives */
  74.             if  (( *mempeek) & 1)
  75.            {
  76.           p_return = (( *mempeek >> 6) & 3) + 1; break;
  77.            }
  78.           else
  79.            {
  80.           p_return = 0; break;
  81.            }
  82.         }
  83.  
  84.    case 5:
  85.  
  86.        /* video mode */
  87.        switch   (*mempeek & 48)
  88.         {
  89.            case 16: p_return = 40; break;
  90.            case 48: p_return = 80; break;
  91.            case 32: p_return = 80; break;
  92.        default: p_return = 0;  break;
  93.           }
  94.           break;
  95.  
  96.    case 6:             
  97.         {
  98.           /* look at BIOS memory size */
  99.           mempeek =  (int *) MEMSIZ;
  100.           p_return =  *mempeek;
  101.           break;
  102.         }
  103.    case 7:                 
  104.         {
  105.           /* look at keyboard status and display */
  106.           mempeek =  (int *) KEY_STAT;
  107.           /* insert caps */
  108.           p_return = (( *mempeek >> 7) & 1) ? 1:0;
  109.           break;
  110.         }
  111.     case 8:
  112.         {
  113.           /* Caps Lock */
  114.           mempeek =  (int *) KEY_STAT;
  115.           p_return = (( *(mempeek) >> 6) & 1) ? 1:0; 
  116.           break;
  117.         }
  118.    case 9:
  119.         {
  120.           /* Num Lock */
  121.           mempeek =  (int *) KEY_STAT;
  122.           p_return = ((( *(mempeek) >> 5) & 1) ? 1:0); 
  123.           break;
  124.         }
  125.    case 10:
  126.         {
  127.           /* Scroll Lock */
  128.           mempeek =  (int *) KEY_STAT;
  129.           p_return = ((( *(mempeek) >> 4) & 1) ? 1:0); 
  130.           break;
  131.         }
  132.    case 11:                   
  133.         {
  134.           /* look at ROM machine ID byte and display */
  135.           mempeek = (int *) 0xF000FFFE;
  136.           switch ( *(mempeek) & 255)
  137.             {
  138.                /* for a PC */
  139.                case 255: 
  140.                    p_return = 255;break;
  141.  
  142.                /* for a PC XT */
  143.                case 254: 
  144.                    p_return = 254;break;
  145.  
  146.                /* for a PC jr. */
  147.                case 253: 
  148.                    p_return = 253;break;
  149.  
  150.                /* for a PC AT , XT/286, PS2/50, PS2/60 */
  151.                case 252: 
  152.                     p_return = 252;break;
  153.  
  154.                /* for a XT/2  */
  155.                case 251: 
  156.                     p_return = 251;break;
  157.  
  158.                /* for a PC CVT */
  159.                case 249: 
  160.                     p_return = 249;break;
  161.          
  162.                /* for a PS/2 30 */
  163.                case 248: 
  164.                     p_return = 248;break;
  165.  
  166.                /* for a PS/2 80 */
  167.                case 247: 
  168.                     p_return = 247;break;
  169.             }
  170.        break;
  171.        }
  172.    /* If none of the available choices ? */
  173.    default:
  174.         {
  175.         p_return = -1;break;
  176.         }
  177.    }
  178.  
  179.  /* Returns an integer to Clipper. */
  180.  _retni(p_return);   
  181.  
  182. }  /* End of Eq() */ 
  183.